package com.ikas.ai.server.module.data.tdDao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ikas.ai.server.module.cockpit.model.po.SimplifyRealDataHis;
import com.ikas.ai.server.module.data.model.dto.DataTdQueryDto;
import com.ikas.ai.server.module.data.model.tdengine.RealDataHis;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.Date;
import java.util.List;

/**
 * @author wu.yunfeng
 */
@Mapper
public interface DataHisTdMapper extends BaseMapper<RealDataHis> {

    /**
     * 根据meteId组成的表信息查询测点数据
     *
     * @param tableName 表名
     * @param queryDto  入参对象
     * @return list of data_his
     */
    List<SimplifyRealDataHis> getDataHisListByMeteIdQuery(@Param("tableName") String tableName,
                                                          @Param("queryDto") DataTdQueryDto queryDto);

    /**
     * 根据meteId组成的表名查询数据
     *
     * @param tableName      表名
     * @param validMeteValue 有效值
     * @param maxNum         最大值
     * @return list of data_his
     */
    List<RealDataHis> getDataHisListByMeteId(@Param("tableName") String tableName,
                                             @Param("validMeteValue") Integer validMeteValue,
                                             @Param("maxNum") Integer maxNum);

    @Select("select * from #{tableName} where idtime between  #{start} and #{end} order by idtime desc limit 2000")
    List<RealDataHis> selectByTableNameTimeDesc(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);

    @Select("select * from #{tableName} where idtime between  #{start} and #{end}")
    List<RealDataHis> pageByTableNameTimeDesc(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);

    @Select("select * from #{tableName} where idtime between  #{start} and #{end}")
    List<RealDataHis> selectByTableNameAndMeteId(@Param("tableName") String tableName, @Param("meteId") Long meteId, @Param("start") Date start, @Param("end") Date end);

    @Select("select * from #{tableName} where idtime between  #{start} and #{end} order by idtime asc")
    List<RealDataHis> selectByTableNameTimeAsc(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);

    @Select("select * from #{tableName} where idtime < #{time} order by idtime desc limit 1")
    RealDataHis selectByTableNameTimeDescLimit1(@Param("tableName") String tableName, @Param("time") Date time);

    @Select("select * from #{tableName} where idtime <= #{end} and idtime >= #{start} order by idtime desc limit 1")
    RealDataHis selectByTableNameLeTimeDescLimit1(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);

    @Select("select * from #{tableName} where idtime >= #{time} order by idtime asc limit 1")
    RealDataHis selectByTableNameGeTimeDescLimit1(@Param("tableName") String tableName, @Param("time") Date time);

    /**
     * 查询时间范围内数据 包含边界时间点
     *
     * @param tableName 表名
     * @param start     开始时间
     * @param end       结束时间
     * @return list of RealDataHis
     */
    @Select("select * from #{tableName} where idtime >= #{start} and idtime <= #{end}")
    List<RealDataHis> selectByTableNameTime(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);

    /**
     * 查询时间范围内数据 包含边界时间点
     *
     * @param tableName 表名
     * @param start     开始时间
     * @param end       结束时间
     * @return list of RealDataHis
     */
    @Select("select * from #{tableName} where idtime >= #{start} and idtime < #{end} order by idtime asc")
    List<RealDataHis> selectByTableNameTimeNoEndTime(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);

    /**
     * 查询大于某个时间点的数据
     *
     * @param tableName 表名
     * @param start     开始时间
     * @return list of RealDataHis
     */
    @Select("select * from #{tableName} where idtime >= #{start} order by idtime asc limit 1")
    List<RealDataHis> selectByTableNameTimeGeStartTime(@Param("tableName") String tableName, @Param("start") Date start);

    /**
     * 查询时间范围内数据 不包含边界时间点
     *
     * @param tableName 表名
     * @param start     开始时间
     * @param end       结束时间
     * @return list of RealDataHis
     */
    @Select("select * from #{tableName} where idtime > #{start} and idtime < #{end}")
    List<RealDataHis> selectByTableNameAndTime(@Param("tableName") String tableName, @Param("start") Date start, @Param("end") Date end);


}
